<?php
    require_once(dirname(__FILE__) . "/../model/db_driver.php");
	require_once("tabella_classifica.php");
	require_once("lega.php");
	$CALENDARIO_CAMPIONATO = 1;
	$CALENDARIO_COPPA = 7;

	
		
	class Calendario {
		private $tipo;
		private $giornate = array();
		
		public function __construct($giornata, $lega_id){
			$da_caricare;
			
			$driver = new DbDriver();
			$db_days = NULL;
			if($giornata == NULL){
				$db_days = $driver->db_getCalendarioLega($lega_id);
			}else{
				$db_days = $driver->db_getCalendarioGiornata($giornata, $lega_id);	
			}
			if(count($db_days)==0) return;
			$this->tipo = $db_days[0][15];
			$prec_giornata = $db_days[0][0];
			$prec_competizione = $db_days[0][12];
			$cur_giornata = $prec_giornata;
			$cur_competizione = $prec_competizione;
			$scontri = array();
			$giornate = array();
			$s=null;
			//carica le giornate
			$i=0;
			for(; $i < count($db_days); $i++){
				//crea lo scontro rappresentato da questa riga

				$cur_giornata = $db_days[$i][0];
				$cur_competizione = $db_days[$i][12];
				$s = new Scontro(
					$db_days[$i][16],//id calendario (identificativo dello scontro)
					$db_days[$i][2], //'IdSquadraCasa'
					$db_days[$i][3], //'NomeSquadraCasa'
					$db_days[$i][5], //'VotoCasa'
					$db_days[$i][6], //'GolCasa'
					$db_days[$i][7], //'IdSquadraOspite'
					$db_days[$i][8], //'NomeSquadraOspite'
					$db_days[$i][10], //'VotoOspite'
					$db_days[$i][11], //'GolOspite'
					$db_days[$i][17] // eventuali Note
				);
				$s->setAllenatoreCasa($db_days[$i][4]); //'AllenatoreCasa'
				$s->setAllenatoreOspite($db_days[$i][9]); //'AllenatoreOspite'
				//controlla se è cambiata la giornata o se è l'ultima riga dell'array
				if($prec_giornata==$cur_giornata &&  $prec_competizione==$cur_competizione && $i < count($db_days)-1){ //'Giornata'
					array_push($scontri, $s);
				}else{
				//se è cambiata la giornata crea prima quella appena letta
					$g = new Giornata($db_days[$i-1][0],$db_days[$i-1][1],$scontri, $db_days[$i-1][12],
							new Lega($db_days[$i-1][14], $this->getStagione() ,$db_days[$i-1][13], 1,$db_days[$i-1][15])); //l'ultimo argomento dovrebbe eesere id del tipo di lega
					array_push($this->giornate, $g);
				//poi svuota l'array degli scontri e aggiunge l'ultimo creato
					$scontri = array($s);
				}

				if($i<count($db_days)-1){
					$prec_giornata = $db_days[$i][0];
					$prec_competizione = $db_days[$i][12];
				}

			}//end for
			
			if($prec_giornata==$cur_giornata &&  $prec_competizione==$cur_competizione ){ //'Giornata'
				// agigunge l'ultimo scontro all'ultima giornata inserita
				$this->giornate[count($this->giornate)-1]->aggiungiScontro($s);
			}else{
			//se è cambiata la giornata crea prima quella appena letta
				$g = new Giornata($db_days[$i-1][0],$db_days[$i-1][1],$scontri, $db_days[$i-1][12],
						new Lega($db_days[$i-1][14], $db_days[$i-1][13], '', 1,$db_days[$i-1][15])); //l'ultimo argomento dovrebbe eesere id del tipo di lega
				array_push($this->giornate, $g);
			//poi svuota l'array degli scontri e aggiunge l'ultimo creato
				$scontri = array($s);
			}
		
		}

		public static function caricaCalendarioLega($lega_id){
			return new Calendario(NULL,$lega_id);
		}
		
		public static function caricaCalendarioGiornata($giornata, $lega_id){
			return new Calendario($giornata, $lega_id);
		}
		
		public function __destruct(){
			unset($this->tipo);
			foreach($this->giornate as $g){
				$g->__destruct();
			}
		}
		
		public function getTipo(){
			return $this->tipo;
		}
		
		public function getNumGiornate(){
			return count($this->giornate);
		}
		
		public function getGiornata($i){
			return $this->giornate[$i];
		}
		
		private function getCompetizioni(){
		//sarà utile nella query al DB
			global $CALENDARIO_CAMPIONATO, $CALENDARIO_COPPA;
			//return '1';
			global $TC_CAMPIONATO, $TC_COPPA_A, $TC_COPPA_B, $TC_SEMIFINALE, $TC_FINALE_3_4, $TC_FINALE;
			if($this->tipo==$CALENDARIO_CAMPIONATO){
				return "'$TC_CAMPIONATO'";
			}elseif($this->tipo==$CALENDARIO_COPPA){
				return "'$TC_COPPA_A', '$TC_COPPA_B', '$TC_SEMIFINALE', '$TC_FINALE_3_4', '$TC_FINALE'";
			}
		}
		
		public static function getStagione(){
			date_default_timezone_set('Europe/Rome');
			/*$di = date_interval_create_from_date_string('P1Y'); //new DateInterval('P1Y');
			$d = new DateTime(date('Y-m-d'));
			if((int)date('m')>7){
				$d->add($di);
				return date('Y') . "/" . $d->format('Y');
			}else{
				$di->invert = 1;
				$d->add($di);
				return $d->format('Y') . "/" . date('Y');
			}*/
			return "2013/2014";
		}
		
		
		public static function getNextADay(){
		/* restituisce la prima giornata della seria A per la quale non sono stati ancora 
		 * carica i dati */
			$db = new DbDriver();
			$nextA = $db->db_getNextA();
			$nextA = $nextA[0][0];
			if($nextA == null) $nextA = 39;
			return $nextA;
		}
		
	} //end class calendario
	
	class Giornata {
		private $giornata;
		private $giornataA;
		private $competizione;
		private $scontri = array();
		private $lega;
		
		public function __construct($giornata, $giornataA, $scontri, $competizione, $lega){
			$this->giornata = $giornata;
			$this->giornataA = $giornataA;
			$this->scontri = $scontri;
			$this->competizione = $competizione;
			$this->lega = $lega;
		}
		
		public function __destruct(){
			unset($this->giornata);
			unset($this->giornataA);
			unset($this->competizione);
			foreach($this->scontri as $s){
				$s->__destruct();
			}
		}
		
		
		public function getGiornata(){
			return $this->giornata;
		}

		public function getGiornataA(){
			return $this->giornataA;
		}
		
		public function getNumScontri(){
			return count($this->scontri);
		}
		
		public function getScontro($i){
			return $this->scontri[$i];
		}
		
		public function aggiungiScontro($scontro){
			array_push($this->scontri, $scontro);
		}
		
		public function getCompetizione(){
			return $this->competizione;
		}
		
		public function getLega(){
			return $this->lega;
		}
		
		
		public function salva($html_log){
		/* Salva il contenuto del log html in un file e le competizioni sul DB */
			$f = fopen("../dettagli_partite/" . $this->getLega()->getLegaId() . "_" . $this->giornata . ".htm", "w");
			fwrite($f, $html_log);
			fclose($f);
			$driver = new DbDriver();
			$driver->salvaGiornata($this);
		}
		
	} //end class Giornata
	
	class Scontro {
		private $idScontro;
		private $id_casa;
		private $squadra_casa;
		private $punti_casa;
		private $gol_casa;
		private $id_ospite;
		private $squadra_ospite;
		private $punti_ospite;
		private $gol_ospite;
		
		private $allenatore_casa;
		private $allenatore_ospite;
		
		private $note;
		
		public function __construct($calendarioId,
					$idCasa, $squadra_casa, $punti_casa, $gol_casa,
					$idOspite, $squadra_ospite, $punti_ospite, 
					$gol_ospite, $note){
			
			$this->idScontro = $calendarioId;
			$this->id_casa = $idCasa;
			$this->squadra_casa  = $squadra_casa;
			$this->punti_casa  = $punti_casa;
			$this->gol_casa  = $gol_casa;
			$this->squadra_ospite  = $squadra_ospite;
			$this->punti_ospite  = $punti_ospite;
			$this->gol_ospite  = $gol_ospite;
			$this->id_ospite = $idOspite;
			$this->note = $note;
		}
					
		public function __destruct(){
			unset($this->calendarioId);
			unset($this->id_casa);
			unset($this->squadra_casa);
			unset($this->punti_casa);
			unset($this->gol_casa);
			unset($this->id_ospite);
			unset($this->squadra_ospite);
			unset($this->punti_ospite);
			unset($this->gol_ospite);
			
		}
		
		public function getIdScontro(){
			return $this->idScontro;
		}
					
		public function getRisultato(){
			return $this->gol_casa . " - " . $this->gol_ospite;
		}
					
		public function getIdCasa(){
			return $this->id_casa;
		}
					
		public function getSquadraCasa(){
			return $this->squadra_casa;
		}	
		
		public function getGolCasa(){
			return $this->gol_casa;
		}
		
		public function getVotoCasa(){
			return $this->punti_casa;
		}
		
		public function setVotoCasa($votoSquadra){
			$this->punti_casa = $votoSquadra;
			$this->gol_casa = $this->calcolaGol($votoSquadra);
		}
		
		public function getIdOspite(){
			return $this->id_ospite;
		}
					
		public function getSquadraOspite(){
			return $this->squadra_ospite;
		}	
		
		public function getGolOspite(){
			return $this->gol_ospite;
		}
		
		public function getVotoOspite(){
			return $this->punti_ospite;
		}
		
		public function setVotoOspite($votoSqudra){
			$this->punti_ospite = $votoSqudra;
			$this->gol_ospite = $this->calcolaGol($votoSqudra);
		}
		
		public function setAllenatoreCasa($allenatore){
			$this->allenatore_casa = $allenatore;
		}
		
		public function getAllenatoreCasa(){
			return $this->allenatore_casa;
		}
		
		public function setAllenatoreOspite($allenatore){
			$this->allenatore_ospite = $allenatore;
		}
		
		public function getAllenatoreOspite(){
			return $this->allenatore_ospite;
		}
		
		public function getNote(){
			return $this->note;
		}
		
		private function calcolaGol($punti){
		/* In base al numero di punti calcola il numero di gol fatti */
			$gol = ceil(($punti - 65.9) / 6); //calcola il numero di gol in base al voto
			if ($gol < 0) $gol =0;
			return $gol; 
		}
	} //end class Scontro
?>